// https://leetcode.cn/problems/design-an-ordered-stream/
// Created by ade on 2022/8/16.
// 有 n 个 (id, value) 对，其中 id 是 1 到 n 之间的一个整数，value 是一个字符串。不存在 id 相同的两个 (id, value) 对。
//
//设计一个流，以 任意 顺序获取 n 个 (id, value) 对，并在多次调用时 按 id 递增的顺序 返回一些值。
//
//实现 OrderedStream 类：
//
//OrderedStream(int n) 构造一个能接收 n 个值的流，并将当前指针 ptr 设为 1 。
//String[] insert(int id, String value) 向流中存储新的 (id, value) 对。存储后：
//如果流存储有 id = ptr 的 (id, value) 对，则找出从 id = ptr 开始的 最长 id 连续递增序列 ，并 按顺序 返回与这些 id 关联的值的列表。然后，将 ptr 更新为最后那个  id + 1 。
//否则，返回一个空列表。
#include <iostream>
#include <vector>
#include <string>


using namespace std;
class OrderedStream {
public:
    vector <string> nums;
    int ptr = 1;

    OrderedStream(int n) {
        nums.resize(n + 2, "");
    }

    // ["OrderedStream","insert","insert","insert","insert","insert","insert","insert"]
    //[[7],[7,"instm"],[4,"bkjdp"],[2,"xokmm"],[3,"hlmqd"],[6,"cmvec"],[5,"oepdc"],[1,"ztkyz"]]
    vector <string> insert(int idKey, string value) {
        nums[idKey] = value;
        if (ptr != idKey) return {};
        vector <string> res = {};
        while (nums[ptr] != "") {
            res.push_back(nums[ptr]);
            ptr++;
        }
        return res;
    }
};

int main(){
    OrderedStream * o = new OrderedStream(7);
    o->insert(7,"a");
    o->insert(4,"b");
    o->insert(2,"c");
    o->insert(3,"d");
    o->insert(6,"e");
    o->insert(5,"f");
    o->insert(1,"g");
    return 0;
}